package com.函数式接口;

/*
* Predicate<T>:常用的四个方法
	Predicate<T>接口通常用于判断参数是否满足指定的条件
	boolean test(T t):对给定的参数进行判断(判断逻辑由Lambda表达式实现),返回一个布尔值
	default Predicate<T> negate():返回-一个逻辑的否定，对应逻辑非
	default Predicate <T> and(Predicate other):返回-一个组合判断，对应短路与
	default Predicate <T> or(Predicate other):返回一一个组合判断，对应短路或
* */

import java.util.function.Predicate;

public class PredicateDemo01 {
    public static void main(String[] args) {
//        boolean b1 = checkString("hello", (String s) -> {
//            return s.length() > 8;
//        });
//        System.out.println(b1);
        boolean b1 = checkString("hello", s -> s.length() > 8);
        System.out.println(b1);
        boolean b2 = checkString("hello2orld", s -> s.length() > 8);
        System.out.println(b2);

        boolean b3 = checkString("hello", s -> s.length() > 8, s -> s.length() < 15);
        System.out.println(b3);
        boolean b4 = checkString("helloworld", s -> s.length() > 8, s -> s.length() < 15);
        System.out.println(b4);
    }

    //同一个字符串给出两个不同的判断条件，最后吧两个判断的记过做逻辑与运算的结果作为最终的结果
    private static boolean checkString(String s, Predicate<String> pre1, Predicate<String> pre2) {
//        boolean b1 = pre1.test(s);
//        boolean b2 = pre2.test(s);
//        boolean b = b1 && b2;
//        return b;
//        return pre1.and(pre2).test(s);
        return pre1.or(pre2).test(s);
    }

    //判断给定的字符串师傅满足要求
    private static boolean checkString(String s, Predicate<String> pre) {
        return pre.test(s);
    }
}
